package com.itfreer.bpm.flow.api;

import java.util.List;

import com.itfreer.bpm.flow.findwork.para.FindWorkInfo;
import com.itfreer.bpm.history.entity.BpmHistoryEntity;
import com.itfreer.bpm.messager.BpmMessage;
import com.itfreer.bpm.option.para.ObservationInfo;
import com.itfreer.bpm.option.para.OptionInfo;
import com.itfreer.bpm.option.para.ProjActCommonInfo;
import com.itfreer.bpm.power.para.UserInfo;
import com.itfreer.form.api.BaseService;
/**
 * 流程过程驱动
 * @author Administrator
 *
 */
public interface IBaseWorkFlowService<T extends IBpmProjectEntity> extends BaseService<T>{
	/**
	 * 获取下一个环节操作
	 * @param definedid 流程定义id
	 * @param entity 项目记录
	 * @param editHistory 编辑历史
	 * @param user 用户信息
	 * @return
	 */
	public OptionInfo getNextTask(String definedid,T entity,List<BpmHistoryEntity> editHistory,UserInfo user);
	
	/**
	 * 流程通过操作处理
	 * @param optionInfo 流程操作信息（包括用户、节点操作）
	 * @param entity 项目记录
	 * @param user 用户信息
	 */
	public BpmMessage signTask(OptionInfo oInfo,T entity,UserInfo user);
	
	/**
	 * 获取退回节点操作
	 * @param sexeid
	 * @return
	 */
	public OptionInfo getBackTask(String definedid,T entity,List<BpmHistoryEntity> editHistory,UserInfo user);
	
	/**
	 * 退回操作处理
	 * @param optionInfo 流程操作信息（包括用户、节点操作）
	 * @param entity
	 */
	public BpmMessage sendBack(OptionInfo oInfo,T entity,UserInfo user);
	
	/**
	 * 撤回流程操作
	 * @param sexeid
	 */
	public void retractTask(UserInfo user,String sexeid);
	
	/**
	 * 撤销流程
	 * @param info
	 * @param sexeid
	 */
	public void destoryAct(ObservationInfo info,String sexeid);
	
	/**
	 * 重新激活流程
	 * @param info
	 * @param sexeid
	 */
	public void rebirthAct(ObservationInfo info,String sexeid);
	
	/**
	 * 流程挂起操作
	 * @param info
	 * @param sexeid
	 */
	public void suspendAct(ObservationInfo info,String sexeid);
	
	/**
	 * 流程解挂操作
	 * @param info
	 * @param sexeid
	 */
	public void activateAct(ObservationInfo info,String sexeid);
	
	/**
	 * 获取携带流程信息实体
	 * @param guid 唯一值
	 * @return
	 */
	public ProjActCommonInfo getActCommonInfo(String sexeid);
	
	/**
	 * 获取工作记录
	 * @param bpmKey 流程主键
	 * @param id 项目数据库id
	 * @param user 用户信息
	 * @return
	 */
	public FindWorkInfo<T> findWork(String bpmKey,String id,UserInfo user);
	
	
	/**
	 * 获取跳转节点功能
	 * @param definedid 流程定义id
	 * @param entity 项目记录
	 * @param editHistory 编辑历史
	 * @param user 用户信息
	 * @return
	 */
	public OptionInfo getSkipTask(String definedid,T entity,List<BpmHistoryEntity> editHistory,UserInfo user);
	
	/**
	 * 流程跳转操作
	 * @param optionInfo 流程操作信息（包括用户、节点操作）
	 * @param entity
	 */
	public BpmMessage skipTask(OptionInfo oInfo,T entity,UserInfo user);
	
	/**
	 * 流程退件处理
	 * @param optionInfo 流程操作信息（包括用户、节点操作）
	 * @param entity
	 */
	public BpmMessage disposal(OptionInfo oInfo,T entity,UserInfo user);
	
	
	/**
	 * 流程复活
	 * @param oInfo
	 * @param entity
	 * @param user
	 * @return
	 */
	public BpmMessage easter(OptionInfo oInfo,T entity,UserInfo user);
	
	/**
	 * 流程保存操作
	 * @param optionInfo 流程操作信息（包括用户、节点操作）
	 * @param entity
	 */
	public BpmMessage processSave(OptionInfo oInfo,T entity,UserInfo user);
	
	/**
	 * 用户自定义退件操作
	 * @param optInfo
	 * @param entity
	 * @param user
	 * @return
	 */
	BpmMessage userDispose(OptionInfo optInfo, T entity, UserInfo user);
	
}
